@@ -10,13 +10,18 @@ from django_response import response  | 
            ||
| 10 | 10 | 
                from paginator import pagination  | 
            
| 11 | 11 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 12 | 12 | 
                 | 
            
| 13 | 
                +from account.models import UserInfo  | 
            |
| 13 | 14 | 
                from maintenance.models import ExpressCompanyInfo, MaintenaceInfo  | 
            
| 15 | 
                +from pre.custom_message import sendtemplatemessage  | 
            |
| 14 | 16 | 
                from utils.admin_utils import is_admin, is_maintenanceman  | 
            
| 15 | 17 | 
                from utils.error.errno_utils import MaintenanceStatusCode  | 
            
| 16 | 18 | 
                from utils.kuaidi.subscribe import KuaiDi100 as KuaiDi100Subscribe  | 
            
| 17 | 19 | 
                from utils.kuaidi.synquery import KuaiDi100  | 
            
| 18 | 20 | 
                 | 
            
| 19 | 21 | 
                 | 
            
| 22 | 
                +WECHAT = settings.WECHAT  | 
            |
| 23 | 
                +  | 
            |
| 24 | 
                +  | 
            |
| 20 | 25 | 
                @logit  | 
            
| 21 | 26 | 
                def maintenance_add(request):  | 
            
| 22 | 27 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
                @@ -31,7 +36,7 @@ def maintenance_add(request):  | 
            ||
| 31 | 36 | 
                     point_name = request.POST.get('point_name', '')
               | 
            
| 32 | 37 | 
                     express_name = request.POST.get('express_name', '')
               | 
            
| 33 | 38 | 
                     tracking_number = request.POST.get('tracking_number', '')
               | 
            
| 34 | 
                -    maintenance_status = request.POST.get('maintenance_status', u'寄出运送中')
               | 
            |
| 39 | 
                +    maintenance_status = request.POST.get('maintenance_status', MaintenaceInfo.TRACKING_TO_DESPATCH)
               | 
            |
| 35 | 40 | 
                 | 
            
| 36 | 41 | 
                try:  | 
            
| 37 | 42 | 
                company = ExpressCompanyInfo.objects.get(name=express_name, status=True)  | 
            
                @@ -100,7 +105,7 @@ def maintenance_update(request):  | 
            ||
| 100 | 105 | 
                     tracking_number = request.POST.get('tracking_number', '')
               | 
            
| 101 | 106 | 
                     back_express_name = request.POST.get('back_express_name', '')
               | 
            
| 102 | 107 | 
                     back_tracking_number = request.POST.get('back_tracking_number', '')
               | 
            
| 103 | 
                -    maintenance_status = request.POST.get('maintenance_status', u'寄出运送中')
               | 
            |
| 108 | 
                +    maintenance_status = request.POST.get('maintenance_status', MaintenaceInfo.TRACKING_TO_DESPATCH)
               | 
            |
| 104 | 109 | 
                 | 
            
| 105 | 110 | 
                try:  | 
            
| 106 | 111 | 
                maintenance = MaintenaceInfo.objects.get(id=maintenance_id, status=True)  | 
            
                @@ -112,6 +117,11 @@ def maintenance_update(request):  | 
            ||
| 112 | 117 | 
                 | 
            
| 113 | 118 | 
                old_tracking_number = maintenance.tracking_number  | 
            
| 114 | 119 | 
                old_back_tracking_number = maintenance.back_tracking_number  | 
            
| 120 | 
                + old_maintenance_status = maintenance.maintenance_status  | 
            |
| 121 | 
                +  | 
            |
| 122 | 
                + # 新增 `back_tracking_number` 之后,更新维修状态  | 
            |
| 123 | 
                + if not maintenance_status and not old_back_tracking_number and back_tracking_number:  | 
            |
| 124 | 
                + maintenance_status = MaintenaceInfo.TRACKING_FIXED_BACK  | 
            |
| 115 | 125 | 
                 | 
            
| 116 | 126 | 
                if name:  | 
            
| 117 | 127 | 
                maintenance.name = name  | 
            
                @@ -148,7 +158,8 @@ def maintenance_update(request):  | 
            ||
| 148 | 158 | 
                if maintenance_status:  | 
            
| 149 | 159 | 
                maintenance.maintenance_status = maintenance_status  | 
            
| 150 | 160 | 
                maintenance_status_at = maintenance.maintenance_status_at  | 
            
| 151 | 
                - maintenance_status_at[maintenance_status] = tc.utc_datetime()  | 
            |
| 161 | 
                + if maintenance_status not in maintenance_status_at:  | 
            |
| 162 | 
                + maintenance_status_at[maintenance_status] = tc.utc_datetime()  | 
            |
| 152 | 163 | 
                maintenance.maintenance_status_at = maintenance_status_at  | 
            
| 153 | 164 | 
                maintenance.save()  | 
            
| 154 | 165 | 
                 | 
            
                @@ -157,6 +168,9 @@ def maintenance_update(request):  | 
            ||
| 157 | 168 | 
                if back_tracking_number and back_tracking_number != old_back_tracking_number:  | 
            
| 158 | 169 | 
                maintenance_tracking_info_subscribe(maintenance, 'back_tracking')  | 
            
| 159 | 170 | 
                 | 
            
| 171 | 
                + if maintenance_status != old_maintenance_status:  | 
            |
| 172 | 
                + maintenance_status_update_sendtemplatemessage(maintenance)  | 
            |
| 173 | 
                +  | 
            |
| 160 | 174 | 
                return response()  | 
            
| 161 | 175 | 
                 | 
            
| 162 | 176 | 
                 | 
            
                @@ -197,7 +211,43 @@ def maintenance_detail(request):  | 
            ||
| 197 | 211 | 
                })  | 
            
| 198 | 212 | 
                 | 
            
| 199 | 213 | 
                 | 
            
| 200 | 
                -def is_tracking_signed(tracking_info):  | 
            |
| 214 | 
                +def maintenance_status_update_sendtemplatemessage(maintenance):  | 
            |
| 215 | 
                + try:  | 
            |
| 216 | 
                + user = UserInfo.objects.get(user_id=maintenance.user_id, status=True)  | 
            |
| 217 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 218 | 
                + return  | 
            |
| 219 | 
                +  | 
            |
| 220 | 
                + # Send template_message  | 
            |
| 221 | 
                +    # data = {
               | 
            |
| 222 | 
                +    #     "first": {
               | 
            |
| 223 | 
                + # "value": u'你的补码申请已通过,请点击消息绑定您的电子保修卡',  | 
            |
| 224 | 
                + # "color": "#173177"  | 
            |
| 225 | 
                + # },  | 
            |
| 226 | 
                +    #     "keyword1": {
               | 
            |
| 227 | 
                + # "value": log.name,  | 
            |
| 228 | 
                + # "color": "#173177"  | 
            |
| 229 | 
                + # },  | 
            |
| 230 | 
                +    #     "keyword2": {
               | 
            |
| 231 | 
                + # "value": log.model_name,  | 
            |
| 232 | 
                + # "color": "#173177"  | 
            |
| 233 | 
                + # },  | 
            |
| 234 | 
                +    #     "keyword3": {
               | 
            |
| 235 | 
                + # "value": log.sn,  | 
            |
| 236 | 
                + # "color": "#173177"  | 
            |
| 237 | 
                + # },  | 
            |
| 238 | 
                +    #     "remark": {
               | 
            |
| 239 | 
                + # "value": u'感谢您的使用',  | 
            |
| 240 | 
                + # "color": "#173177"  | 
            |
| 241 | 
                + # }  | 
            |
| 242 | 
                + # }  | 
            |
| 243 | 
                + #  | 
            |
| 244 | 
                +    # wxcfg = WECHAT.get('MINIAPP', {})
               | 
            |
| 245 | 
                +    # appid = wxcfg.get('appID')
               | 
            |
| 246 | 
                + #  | 
            |
| 247 | 
                +    # sendtemplatemessage(openid=user.openid, template_id=settings.TEMPLATE_ID_COMPLEMENT, data=data, miniappid=appid, minipagepath='/pages/register/consumer/consumer?q={}&marketcode=1'.format(ciphertext))
               | 
            |
| 248 | 
                +  | 
            |
| 249 | 
                +  | 
            |
| 250 | 
                +def is_maintenance_tracking_signed(tracking_info):  | 
            |
| 201 | 251 | 
                if not tracking_info:  | 
            
| 202 | 252 | 
                return False  | 
            
| 203 | 253 | 
                     items = tracking_info.get('data', [])
               | 
            
                @@ -206,6 +256,28 @@ def is_tracking_signed(tracking_info):  | 
            ||
| 206 | 256 | 
                     return items[0].get('status') == u'签收'
               | 
            
| 207 | 257 | 
                 | 
            
| 208 | 258 | 
                 | 
            
| 259 | 
                +def maintenance_tracking_info_update(maintenance, type_, tracking_info):  | 
            |
| 260 | 
                + old_maintenance_status = maintenance.maintenance_status  | 
            |
| 261 | 
                + is_tracking_signed = is_maintenance_tracking_signed(tracking_info)  | 
            |
| 262 | 
                + if type_ == 'tracking':  | 
            |
| 263 | 
                + maintenance.tracking_info = tracking_info  | 
            |
| 264 | 
                + maintenance.tracking_signed = is_tracking_signed  | 
            |
| 265 | 
                + maintenance_status = MaintenaceInfo.TRACKING_SIGNED_FIXING  | 
            |
| 266 | 
                + else:  | 
            |
| 267 | 
                + maintenance.back_tracking_info = tracking_info  | 
            |
| 268 | 
                + maintenance.back_tracking_signed = is_tracking_signed  | 
            |
| 269 | 
                + maintenance_status = MaintenaceInfo.TRACKING_BACK_SIGNED  | 
            |
| 270 | 
                + maintenance.maintenance_status = maintenance_status  | 
            |
| 271 | 
                + maintenance_status_at = maintenance.maintenance_status_at  | 
            |
| 272 | 
                + if maintenance_status not in maintenance_status_at:  | 
            |
| 273 | 
                + maintenance_status_at[maintenance_status] = tc.utc_datetime()  | 
            |
| 274 | 
                + maintenance.maintenance_status_at = maintenance_status_at  | 
            |
| 275 | 
                + maintenance.save()  | 
            |
| 276 | 
                +  | 
            |
| 277 | 
                + if maintenance_status != old_maintenance_status:  | 
            |
| 278 | 
                + maintenance_status_update_sendtemplatemessage(maintenance)  | 
            |
| 279 | 
                +  | 
            |
| 280 | 
                +  | 
            |
| 209 | 281 | 
                @logit  | 
            
| 210 | 282 | 
                def maintenance_tracking_info(request):  | 
            
| 211 | 283 | 
                     maintenance_id = request.POST.get('maintenance_id', '')
               | 
            
                @@ -231,13 +303,7 @@ def maintenance_tracking_info(request):  | 
            ||
| 231 | 303 | 
                             tracking_info = {}
               | 
            
| 232 | 304 | 
                 | 
            
| 233 | 305 | 
                if tracking_info:  | 
            
| 234 | 
                - if type_ == 'tracking':  | 
            |
| 235 | 
                - maintenance.tracking_info = tracking_info  | 
            |
| 236 | 
                - maintenance.tracking_signed = is_tracking_signed(tracking_info)  | 
            |
| 237 | 
                - else:  | 
            |
| 238 | 
                - maintenance.back_tracking_info = tracking_info  | 
            |
| 239 | 
                - maintenance.back_tracking_signed = is_tracking_signed(tracking_info)  | 
            |
| 240 | 
                - maintenance.save()  | 
            |
| 306 | 
                + maintenance_tracking_info_update(maintenance, type_, tracking_info)  | 
            |
| 241 | 307 | 
                 | 
            
| 242 | 308 | 
                     return response(data={
               | 
            
| 243 | 309 | 
                'type': type_,  | 
            
                @@ -283,12 +349,6 @@ def maintenance_tracking_info_callback(request):  | 
            ||
| 283 | 349 | 
                except MaintenaceInfo.DoesNotExist:  | 
            
| 284 | 350 | 
                return response(MaintenanceStatusCode.MAINTENACE_NOT_FOUND)  | 
            
| 285 | 351 | 
                 | 
            
| 286 | 
                - if type_ == 'tracking':  | 
            |
| 287 | 
                - maintenance.tracking_info = tracking_info  | 
            |
| 288 | 
                - maintenance.tracking_signed = is_tracking_signed(tracking_info)  | 
            |
| 289 | 
                - else:  | 
            |
| 290 | 
                - maintenance.back_tracking_info = tracking_info  | 
            |
| 291 | 
                - maintenance.back_tracking_signed = is_tracking_signed(tracking_info)  | 
            |
| 292 | 
                - maintenance.save()  | 
            |
| 352 | 
                + maintenance_tracking_info_update(maintenance, type_, tracking_info)  | 
            |
| 293 | 353 | 
                 | 
            
| 294 | 354 | 
                return response()  | 
            
                @@ -54,6 +54,11 @@ class ExpressCompanyInfo(BaseModelMixin):  | 
            ||
| 54 | 54 | 
                 | 
            
| 55 | 55 | 
                 | 
            
| 56 | 56 | 
                class MaintenaceInfo(BaseModelMixin):  | 
            
| 57 | 
                + TRACKING_TO_DESPATCH = u'寄出运送中'  | 
            |
| 58 | 
                + TRACKING_SIGNED_FIXING = u'已签收修理中'  | 
            |
| 59 | 
                + TRACKING_FIXED_BACK = u'已修复寄回'  | 
            |
| 60 | 
                + TRACKING_BACK_SIGNED = u'寄回签收'  | 
            |
| 61 | 
                +  | 
            |
| 57 | 62 | 
                user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            
| 58 | 63 | 
                 | 
            
| 59 | 64 | 
                name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')  | 
            
                @@ -81,7 +86,7 @@ class MaintenaceInfo(BaseModelMixin):  | 
            ||
| 81 | 86 | 
                back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收')  | 
            
| 82 | 87 | 
                 | 
            
| 83 | 88 | 
                # 寄出运送中、已签收修理中、已修复寄回、寄回签收  | 
            
| 84 | 
                - maintenance_status = models.CharField(_(u'maintenance_status'), max_length=8, default=u'寄出运送中', help_text=u'维修状态')  | 
            |
| 89 | 
                + maintenance_status = models.CharField(_(u'maintenance_status'), max_length=8, default=TRACKING_TO_DESPATCH, help_text=u'维修状态')  | 
            |
| 85 | 90 | 
                     maintenance_status_at = JSONField(_(u'maintenance_status_at'), blank=True, null=True, default={}, help_text=u'维修状态变更时间')
               | 
            
| 86 | 91 | 
                 | 
            
| 87 | 92 | 
                class Meta:  |